home *** CD-ROM | disk | FTP | other *** search
- ; ***********************************************
- ; * MIDI8051 - Mikrocontroller Entwicklungsboard
- ; * fuer ATARI ST/STE
- ; *
- ; * MORSE: Diese kleine Demo sendet einen Text im
- ; * Morsealphabet. Das Signal wird auf der
- ; * eingebauten LED (optisch) und und am
- ; * Port P1.0 als Tonsignal ausgegeben.
- ; * Mit einer Taste zwischen P3.3 und GND
- ; * laesst sich die Morsetonhoehe aendern.
- ; *
- ; ***********************************************
-
- .registers reg51.inc ; 8031-Register-Defs.
-
- ; * Konstanten: Morsetempo und Tonhoehe:
- tonh_o = 200 ; Die orig. Werte
- speed_o = 200
-
- ; * Variablen (im internen RAM)
-
- .var_org $30
-
- tonh: .ds.b 1 ; 1 Byte fuer tonh
- speed: .ds.b 1 ; 1 Byte fuer speed
- stack: ; darueber ist Stack
-
- .text_org $8000 ; RAM Entwicklungsboards
-
- ; * Hier geht's los:
- go_0:
- mov SP,#stack ; Stack ueber Vars.
- mov tonh,#tonh_o ; Variablen init.
- mov speed,#speed_o ; Originalpeed
-
- go:
- mov DPTR,#text ; Auf den Text zeigen
-
- again:
- movx A,@DPTR ; Zeich. @DPTR im XRAM
- inc DPTR ; DPTR auf naechstes Byte
- jz go ; '0': Wieder von vorne
-
- jb P3.3,ton_ok ; Schalter am Port gedr.?
- inc speed ; Ton hoeher, damit aber
- dec tonh ; wg. Tempo konst.: Speed dekr.
- mov A,#'e' ; ein 'e' ausgeben (.)
- mov DPTR,#text ; und wieder von vorne...
- ton_ok:
-
- cjne A,#' ',was
-
- mov R3,#16 ; Space: Laengere Pause
- acall pause
- sjmp again ; und von vorne
-
- was: ; Es gibt was zu piepsen
- acall holen ; Daten zum Buchst. holen
- zeich:
- setb P3.5 ; LED an
- rlc A ; A shift, Bit7 in Carry
- jnc kurz
- acall on ; Lang: lang piepsen
- acall on
- kurz:
- acall on ; Kurz: kurz piepsen
- clr P3.5 ; LED aus
- setb P1.0 ; Lautsp. aus (sparen!)
-
- mov R3,#1
- acall pause ; kurz warten
- djnz R0,zeich ; Zeichen ausgeben
-
- mov R3,#4 ; am Ende:
- acall pause ; laengere Pause
-
- sjmp again ; Bis Textende...
-
- ; * pause: Wartet in R2 angegebene Pausen
- pause:
- mov R2,speed
- ?p1:
- mov R1,tonh ; Timing wie 'on:'
- djnz R1,! ; Inner Warteschleife
- djnz R2,?p1
- djnz R3,pause ; Aeussere Warteschl.
- ret
-
- ; * on: Sound piepen, kurz warten
- on:
- mov R2,speed ; 'speed' mal
- ?o1: ; '?': Verstecktes Label
- cpl P1.0 ; Lautsprecher AN/AUS
- mov R1,tonh ; tonhoehe
- djnz R1,! ; Inner Warteschleife
- djnz R2,?o1 ; Aeussere Warteschl.
- ret
-
- ; * Holen A: Lang/Kurz's, R0: Anzahl Bits
- holen:
- add A,#-'a' ; A=A-'a'
- rl A ; A=2*A
- mov R0,A ; A merken
- add A,#(alphabet-h1)+1 ; Offs. zur Tab.
- movc A,@A+PC ; Anz. Bits holen
- h1:
- xch A,R0 ; A/R0 vertausch.
- add A,#alphabet-h2 ; R0: Anzahl Bits
- movc A,@A+PC ; A: Muster
- h2:
- ret
-
- alphabet:
- ; * Aufb.: 1.) 1/0: lang/kurz, 2.) Anz. Bits
- .dc.b %01000000,2 ; 'a' .-
- .dc.b %10000000,4 ; 'b' -...
- .dc.b %10100000,4 ; 'c' -.-.
- .dc.b %10000000,3 ; 'd' -..
- .dc.b %00000000,1 ; 'e' .
- .dc.b %00100000,4 ; 'f' ..-.
- .dc.b %11000000,3 ; 'g' --.
- .dc.b %00000000,4 ; 'h' ....
- .dc.b %00000000,3 ; 'i' ..
- .dc.b %01110000,4 ; 'j' .---
- .dc.b %10100000,3 ; 'k' -.-
- .dc.b %01000000,4 ; 'l' .-..
- .dc.b %11000000,2 ; 'm' --
- .dc.b %10000000,2 ; 'n' -.
- .dc.b %11100000,3 ; 'o' ---
- .dc.b %01100000,4 ; 'p' .--.
- .dc.b %11010000,4 ; 'q' --.-
- .dc.b %10100000,3 ; 'r' -.-
- .dc.b %00000000,3 ; 's' ...
- .dc.b %10000000,1 ; 't' -
- .dc.b %00100000,3 ; 'u' ..-
- .dc.b %00100000,4 ; 'v' ...-
- .dc.b %01100000,3 ; 'w' .--
- .dc.b %10010000,4 ; 'x' -..-
- .dc.b %10110000,4 ; 'y' -.--
- .dc.b %11000000,4 ; 'z' --..
-
- ; * Der Morsetext (nur Kleinbuchstaben und
- ;* 'Space', keine Zahlen!)
- text:
- .dc.b "hallo user hier morst dein "
- .dc.b "mikrocontroller ",0
-
-